package com.snj.suiji;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandomDecimal2 {

    public static void main(String[] args) {
        // 示例调用
        BigDecimal inputNumber = new BigDecimal("1");
        List<BigDecimal> randomNumbers = generateRandomDecimals(inputNumber, 10);

        randomNumbers.forEach(System.out::println);
    }

    /**
     * 生成10个随机小数，范围在输入数的±5%之间，保留三位小数
     *
     * @param inputNumber 输入的小数
     * @return 包含10个随机小数的数组
     */
    public static List<BigDecimal> generateRandomDecimals(BigDecimal inputNumber, Integer size) {
        // 计算范围
        // 下限：输入数的95%
        BigDecimal lowerBound = inputNumber.multiply(new BigDecimal("0.90"));
        // 上限：输入数的105%
        BigDecimal upperBound = inputNumber.multiply(new BigDecimal("1.5"));

        // 生成10个随机小数
        Random random = new Random();
        List<BigDecimal> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            // 生成随机小数
            double randomValue = lowerBound.doubleValue() +
                    (upperBound.doubleValue() - lowerBound.doubleValue()) * random.nextDouble();
            // 保留三位小数
            BigDecimal randomNumber = new BigDecimal(randomValue).setScale(3, RoundingMode.HALF_UP);
            list.add(randomNumber);
        }

        return list;
    }
}